class C:

    def __init_subclass__(cls, value):
        print("父爱如山～")
        cls.x = value
        print("cls.x = value 已经赋值～")


class D(C, value=520):
    x = 250


# 子类D定义完成之后就会去执行父类中的 __init_subclass__ 方法
# 父爱如山～
# cls.x = value 已经赋值～

print("========================================================")

d = D()
print(d.x)  # 520 由此可见，此时的 x 已经被父类的 __init_subclass__ 方法修改过
print(D.x)  # 520

print("========================================================")

# 如何使用 type 函数去定义类似 D 的类型呢？
# 答案是使用第四个参数

E = type('E', (C,), dict(x=250), value=520)

# 父爱如山～
# cls.x = value 已经赋值～
print(E.x)  # 520
e = E()
print(e.x)  # 520
